package com.dtlaya.allutils.dcmThreadUploadInsertDatebase.service;


import com.dtlaya.allutils.dcmThreadUploadInsertDatebase.entity.DicomEntities;
import org.springframework.stereotype.Service;


import java.awt.*;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;

@Service
public class DicomDatabaseService {

//    private final JdbcTemplate jdbcTemplate;
//    private final PatientRepository patientRepository;
//    private final StudyRepository studyRepository;
//    private final SeriesRepository seriesRepository;
//    private final ImageRepository imageRepository;
//
//    // 使用缓存减少数据库查询
//    private final Cache<String, Long> patientCache = Caffeine.newBuilder()
//        .maximumSize(10_000)
//        .build();
//
//    private final Cache<String, Long> studyCache = Caffeine.newBuilder()
//        .maximumSize(50_000)
//        .build();
//
//    private final Cache<String, Long> seriesCache = Caffeine.newBuilder()
//        .maximumSize(100_000)
//        .build();
//
//    @Transactional
//    public void batchSave(List<DicomEntities> entitiesList) {
//        // 批量处理患者
//        batchProcessPatients(entitiesList);
//
//        // 批量处理研究
//        batchProcessStudies(entitiesList);
//
//        // 批量处理序列
//        batchProcessSeries(entitiesList);
//
//        // 批量处理图像
//        batchProcessImages(entitiesList);
//    }
//
//    private void batchProcessPatients(List<DicomEntities> entitiesList) {
//        // 过滤需要插入的患者
//        List<Patient> patientsToInsert = entitiesList.stream()
//            .map(DicomEntities::getPatient)
//            .filter(patient -> patientCache.getIfPresent(patient.getPatientId()) == null)
//            .distinct()
//            .toList();
//
//        if (!patientsToInsert.isEmpty()) {
//            // 批量插入
//            jdbcTemplate.batchUpdate(
//                "INSERT INTO patient (patient_id, patient_name, patient_birth_date, patient_sex) " +
//                "VALUES (?, ?, ?, ?) " +
//                "ON DUPLICATE KEY UPDATE patient_name = VALUES(patient_name)",
//                new BatchPreparedStatementSetter() {
//                    @Override
//                    public void setValues(PreparedStatement ps, int i) throws SQLException {
//                        Patient patient = patientsToInsert.get(i);
//                        ps.setString(1, patient.getPatientId());
//                        ps.setString(2, patient.getPatientName());
//                        ps.setDate(3, new java.sql.Date(patient.getPatientBirthDate().getTime()));
//                        ps.setString(4, patient.getPatientSex());
//                    }
//
//                    @Override
//                    public int getBatchSize() {
//                        return patientsToInsert.size();
//                    }
//                }
//            );
//
//            // 刷新缓存
//            List<Patient> insertedPatients = patientRepository.findByPatientIdIn(
//                patientsToInsert.stream()
//                    .map(Patient::getPatientId)
//                    .toList()
//            );
//
//            insertedPatients.forEach(p ->
//                patientCache.put(p.getPatientId(), p.getId())
//            );
//        }
//    }
//
//    private void batchProcessStudies(List<DicomEntities> entitiesList) {
//        // 类似患者处理的逻辑，但需要关联患者ID
//        // ...
//    }
//
//    private void batchProcessSeries(List<DicomEntities> entitiesList) {
//        // 类似处理逻辑，但需要关联研究ID
//        // ...
//    }
//
//    private void batchProcessImages(List<DicomEntities> entitiesList) {
//        // 直接批量插入图像数据
//        jdbcTemplate.batchUpdate(
//            "INSERT INTO images (sop_instance_uid, file_path, file_size, series_id) " +
//            "VALUES (?, ?, ?, ?)",
//            new BatchPreparedStatementSetter() {
//                @Override
//                public void setValues(PreparedStatement ps, int i) throws SQLException {
//                    DicomEntities entities = entitiesList.get(i);
//                    Image image = entities.getImage();
//                    ps.setString(1, image.getSopInstanceUid());
//                    ps.setString(2, image.getFilePath());
//                    ps.setLong(3, image.getFileSize());
//
//                    // 从缓存获取系列ID
//                    Long seriesId = seriesCache.getIfPresent(
//                        entities.getSeries().getSeriesInstanceUid()
//                    );
//                    ps.setLong(4, seriesId);
//                }
//
//                @Override
//                public int getBatchSize() {
//                    return entitiesList.size();
//                }
//            }
//        );
//    }
}